package com.jagochan.module.springai.common.repository;

import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

@Component
public class InMemoryChatHistoryRepository implements ChatHistoryRepository {
    private static final Map<String, Set<String>> CACHE_MAP = new HashMap<>();

    /**
     * 新增聊天ID
     *
     * @param chatType 业务类型
     * @param chatId   聊天ID（也叫会话ID）
     */
    @Override
    public void save(String chatType, String chatId) {
        // 当指定的键不存在于映射中，或者其对应的值为 null 时，会使用给定的映射函数计算一个新值，并将该键值对插入到映射中；如果键已经存在且值不为 null，则直接返回现有的值，不会执行计算操作
        Set<String> chatIdSet = CACHE_MAP.computeIfAbsent(chatType, key -> new HashSet<>());
        if (chatIdSet.contains(chatId)) return;
        chatIdSet.add(chatId);
    }

    /**
     * 获取聊天ID列表
     *
     * @param chatType 业务类型
     * @return 聊天ID列表
     */
    @Override
    public Set<String> list(String chatType) {
        return CACHE_MAP.getOrDefault(chatType, new HashSet<>());
    }

}
